package com.zhang.checkselfpermission;

import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import java.security.Permission;

public class PermissionUtil {

    public static String[] permissions = new String[]{
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.CAMERA,
    };


    private static Activity mActivity;
    public static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 10000;

    private static OnPermissionResult mOnPermissionResult;


    /**
     * 第1步：检查是否拥有指定的所有权限
     */
    public static void checkPermissionAllGranted(Activity activity, String[] permissions, OnPermissionResult onPermissionResult) {
        mActivity = activity;
        mOnPermissionResult = onPermissionResult;
//        所有权限是否通过
        boolean allPermissionisAdopt = true;
        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
                // 只要有一个权限没有被授予, 则直接返回 false
                allPermissionisAdopt = false;
                break;
            }
        }
//        首次判断是否有未通过的权限
        if (allPermissionisAdopt) {
            onPermissionResult.onGranted();
        } else {
            onPermissionResult.onError();
        }
    }

    /**
     * 第 2 步: 请求权限
     */
    public static void requestPermissions(String[] permissions) {
        // 一次请求多个权限, 如果其他有权限是已经授予的将会自动忽略掉
        ActivityCompat.requestPermissions(
                mActivity,
                permissions,
                MY_PERMISSIONS_REQUEST_READ_CONTACTS
        );
    }

    /**
     * 第 3 步: 申请权限结果返回处理
     */
    public static void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == PermissionUtil.MY_PERMISSIONS_REQUEST_READ_CONTACTS) {
            boolean isAllGranted = true;
            boolean isNoMoreGranted = true;
            // 判断是否所有的权限都已经授予了
            for (int grant : grantResults) {
                if (grant != PackageManager.PERMISSION_GRANTED) {
                    isAllGranted = false;
                    break;
                }
            }
            if (isAllGranted) {
                // 如果所有的权限都授予了, 则执行备份代码
                mOnPermissionResult.onGranted();
            } else {
                // 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
                for (String permission : permissions) {
                    if (!ActivityCompat.shouldShowRequestPermissionRationale(mActivity, permission)) {
//                        如果为false表示用户点击了不再提醒
                        mOnPermissionResult.onNoMore();
                        return;
                    }
                }
//                    如果为true表示当前只有被禁止
                mOnPermissionResult.onError();
            }
        }
    }

    public interface OnPermissionResult {
        //        用户允许
        void onGranted();

        //        用户禁止
        void onError();

        //        不在提醒
        void onNoMore();
    }

}



